package com.java.test1;

import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * 涉及到String类和其他结构的一个转换
 *
 * @author shkstart
 * @create 2021-01-05 20:44
 */
public class StringTest_2 {

    /*
     *
     * 复习：
     * String和基本数据类型、包装类之间的转换
     * String--》基本数据类型、包装类  需要调用包装类中的静态方法(Integer.parseInt())
     *基本数据类型、包装类---》String  调用String中重载的valueOf（）方法
     * */
    @Test
    public void test1() {
        String s1 = "132";
        int a = Integer.parseInt(s1);
        System.out.println(a);

        int b = 123;
        String s2 = String.valueOf(b);
        System.out.println(s2);
//        System.out.println(s2);
    }

    /*
     * String 和char[]之间的转换:调用String中的toCharArray（）方法
     * char[]--->String : 调用String中的构造器
     *
     * */
    @Test
    public void test2() {
        String s1 = "123avbc";        //题目：转化成"1bva32c"
        char[] chars = s1.toCharArray();
        for (int cha = 0; cha < chars.length; cha++) {
            System.out.println(chars[cha]);
        }

        char[] c1 = {'1', '2', '3', 'a', 'b', 'c'};
        String a = new String(c1);
        System.out.println(a);
    }

    /*
     * String 和 byte[]之间的转换
     * 编码：String-->byte[] :调用String中的getByets（）
     * 解码：byte[]-->String :调用String的构造器
     *
     * 编码：字符串--》字节（）看得懂---》看不懂的二进制数据
     * 解码：编码的逆过程 字节--》字符串   看不懂的二进制数据--->看得懂
     *
     * 说明：解码时，要求解码使用的字符集和编码时所用的字符集一致，否则会出现乱码
     * */
    @Test
    public void test3() throws UnsupportedEncodingException {
        String s1 = "12a3c中国";
        byte[] a = s1.getBytes();                 //使用默认的编码集进行编码“utf-8”
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
        byte[] b = s1.getBytes("gbk"); //使用指定的编码集进行编码“gbk”
        System.out.println(Arrays.toString(b));
        System.out.println("---------------------------------------------");

        String s2 = new String(a);
        String s3 = new String(b);                 //乱码原因：编码器和解码器不一致（因为解码
        // 器默认为utf-8所以 对“gbk”进行解码时会出现乱码）
        System.out.println(s2);                 //12a3c中国
        System.out.println(s3);                 //乱码


        String s4 = new String(b, "gbk");//用指定解码器对其解码
        System.out.println(s4);                 //12a3c中国
    }

    @Test
    public void test4() {
//        StringBuffer s1=new String();
        String s2 = new String();
        StringBuffer s1 = new StringBuffer(s2);
        String s3 = new String(s1);
    }
}
